package cn.fl.ref.fribaseinfo.service;

import java.util.List;

import cmm.mid.core.framework.dto.DataResultDTO;
import cmm.mid.core.framework.page.KeyValueVO;
import cmm.mid.core.framework.page.Pager;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.ref.fribaseinfo.vo.BankAccInfoVO;
import cn.fl.ref.fribaseinfo.vo.FriBaseInfoVO;
import fl.flow.facade.flow.dto.FlowStartParamsDTO;
import fl.ref.fribaseinfo.condition.BankAccInfoQueryCondition;
import fl.ref.fribaseinfo.condition.FriBaseInfoQueryCondition;

/**
 * @Description: 融资机构基础信息
 */
public interface IFriBaseInfoService {

	/**
	 * 获取唯一对象
	 * 
	 * @param id
	 *            主键
	 * @return 对象VO
	 */
	public FriBaseInfoVO selectById(Long id, String sysCd, String orgCd) throws BaseException;

	/**
	 * 新增
	 * 
	 * @param entity
	 * @return
	 */
	public Long add(FriBaseInfoVO entity) throws BaseException;

	/**
	 * 删除
	 * 
	 * @param id
	 * @return
	 */
	public boolean removeById(Long id) throws BaseException;

	/**
	 * 修改
	 * 
	 * @param entity
	 * @return
	 */
	public boolean modify(FriBaseInfoVO entity) throws BaseException;

	/**
	 * 分页查询所有
	 * 
	 * @param page
	 * @return
	 */
	public Pager searchListPage(Pager page) throws BaseException;
	
	/**
	 * 不带分页查询
	 * 
	 * @param condition
	 * @return 
	 */
	public List<FriBaseInfoVO> searchList(FriBaseInfoQueryCondition condition);

	/**
	 * 判断机构缩写是否重复
	 * 
	 * @param id
	 * @param insAbb
	 * @return
	 */
	public boolean isInsAbbExist(Long id, String insAbb) throws BaseException;
	
	/**
	 * 判断银行帐号是否重复
	 * 
	 * @param bankAccInfoVOs
	 * @return
	 * @throws BaseException
	 */
	public boolean isAccNumExist(List<BankAccInfoVO> bankAccInfoVOs)throws BaseException;

	/**
	 * 数据字典项
	 * 
	 * @param grpCd
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> getKvList(String grpCd) throws BaseException;
	
	/**
	 * 根据用户ID和业务主键等参数启动流程
	 * @param flowStartParamsDTO 启动参数
	 */
	public DataResultDTO addFlowStart(FlowStartParamsDTO flowStartParamsDTO)throws BaseException;
	
	/**
	 * 根据融资机构ID 查询方案、授信的流程信息
	 * @param id
	 * @return
	 * @throws BaseException
	 */
	public Pager searchFlowPageById(Pager page)throws BaseException;

	/**
	 * 是 、 否 
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> searchYesNoKVList() throws BaseException;
	/**
	 * 查询帐号信息
	 * @param page
	 * @return
	 * @throws BaseException
	 */
	public Pager searchBaListPage(Pager page) throws BaseException;
	/**
	 * 查询帐号
	 * @param id
	 * @return
	 * @throws BaseException
	 */
	public BankAccInfoVO selectAccById(Long id, String sysCd, String orgCd) throws BaseException;
	/**
	 * 添加帐号
	 * @param entity
	 * @return
	 * @throws BaseException
	 */
	public Long addPayAcc(BankAccInfoVO entity) throws BaseException;
	/**
	 * 账户排序num1升0降
	 * @param id
	 * @param num
	 * @throws BaseException
	 */
	public void changeNum(String id, String num) throws BaseException;
	/**
	 * 放款账号余额更新
	 */
	public void syncBankAcc() throws BaseException;
	/**
	 * 获取付款帐号列表
	 * @param condition
	 * @return
	 * @throws BaseException
	 * 2018年2月11日 
	 * lxb
	 */
	public List<BankAccInfoVO> selectListForPay(BankAccInfoQueryCondition condition)
			throws BaseException;
	/**
	 * 帐号状态
	 * @return
	 * @throws BaseException
	 * 2018年2月11日 
	 * lxb
	 */
	public  List<KeyValueVO> getAccStsCd() throws BaseException;
	/**
	 * 根据用户ID和业务主键等参数启动流程
	 * @param flowStartParamsDTO 启动参数
	 */
	public DataResultDTO addFlowStartForAccount(FlowStartParamsDTO flowStartParamsDTO)throws BaseException;
	
	/**
	 * 	交换两个对象的优先级值
	 * @param friBaseInfoVO
	 * @param friBaseInfoVO2
	 * @return
	 * @throws BaseException
	 */
	public void modifyExchangePriority(FriBaseInfoVO friBaseInfoVO,FriBaseInfoVO friBaseInfoVO2)throws BaseException;

	public DataResultDTO addFlowStartForGuarantee(FlowStartParamsDTO flowStartParamsDTO);

}
